#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

// 8. 读文件
int main()
{
    int fd=open("shuai.txt",O_RDONLY); // 存在文件了，调用两个参数的open
    if(fd<0)
    {
        perror("open error");
        return 1;
    }
    char buff[1024];
    while(1)
    {
        ssize_t size=read(fd,buff,sizeof(buff));
        if(size>0)
        {
            buff[size]=0;
            printf("%s",buff);
        }
        else 
            break;
    }
    close(fd);
    return 0;
}



// 7. 采用系统调用的方式写文件 
//int main()
//{
//    umask(0); // 自己设置掩码
//    // 没有该文件，采用三个参数的open先创建文件，第三个参数是对应的权限码
//    int fd=open("shuai.txt",O_CREAT|O_WRONLY,0644);
//    if(fd<0)
//    {
//        perror("open error");
//        return 1;
//    }
//    int count=5; // 准备写入5条
//    const char*msg="小帅真帅！\n";
//    while (count--)
//        write(fd,msg,strlen(msg));
//    close(fd);
//    return 0;
//}
//#define ONE 1  // 0000 0001
//#define TWO 2  // 0000 0010
//#define THREE 4// 0000 0100
//#include <stdio.h>
//#include <string.h>
//// 6. 传递标志位
//void func(int flag)
//{
//    if(flag & ONE) printf("执行1号功能  ");
//    if(flag & TWO) printf("执行2号功能  ");
//    if(flag & THREE) printf("执行3号功能  ");
//    printf("\n");
//}
//int main()
//{
//    printf("第一次调用：---------------\n");
//    func(ONE);
//    printf("第二次调用：---------------\n");
//    func(ONE | TWO);
//    printf("第三次调用：---------------\n");
//    func(ONE | TWO | THREE);
//    return 0;
//}
//// 5. 打印到屏幕上的三种方式
//int main()
//{
//    // 1. printf
//    printf("hello printf\n");
//    // 2. fprintf
//    fprintf(stdout, "hello fprintf\n");
//    // 3. fwrite
//    const char *msg = "hello fwrite\n";
//    fwrite(msg, strlen(msg), 1, stdout);
//    return 0;
//}
//
// 4. 实现自己的cat命令
//int main(int argc,char* argv[])
//{
//    if(argc!=2)
//    {
//        printf("error，使用cat命令必须后面接要打印的内容！\n");
//        return 1;
//    }
//    FILE* fp=fopen(argv[1],"r");
//    if(!fp)
//    {
//        perror("fopen error!\n");
//        return 1;
//    }
//    char buf[1024]; // 定义缓冲区
//    while(1)
//    {
//        int size=fread(buf,1,sizeof(buf),fp);
//        if(size>0)
//        {
//            buf[size]=0;
//            printf("%s",buf);
//        }
//        if(feof(fp))
//            break;
//    }
//    fclose(fp);
//    return 0;
//}
//// 3. 读文件
//int main()
//{
//    // 以读的方式打开，若不存在，则新建，存在则从头开始读，不会刷新内容
//    FILE* fp=fopen("hello.txt","r");
//    if(!fp)
//    {
//        perror("fopen error!");
//        return 1;
//    }
//    char buf[1024]; // 定义缓冲区来读
//    const char* msg="我是小帅，喜欢小美!\n";
//    while(1)
//    {
//        ssize_t s=fread(buf,1,strlen(msg),fp);
//        if(s>0)
//        {
//            buf[s]=0; // 文件里读进来没有\0，\0是语言层面的规定，所以需要自己读入后，手动增添\0
//            printf("%s",buf);
//        }
//        if(feof(fp))
//            break;
//    }
//    fclose(fp);
//    return 0;
//}
////// 2. 写文件
//int main()
//{
//    FILE* fp=fopen("hello.txt","w");
//    if(!fp)
//    {
//        perror("fopen error");
//        return 1;
//    }
//    const char* msg="我是小帅，喜欢小美!\n";
//    int count = 5; // 准备写入5条
//    while(count--)
//        fwrite(msg,strlen(msg),1,fp);
//    fclose(fp);
//    return 0;
//}
//// 1. 打开文件
//int main()
//{
//    FILE* fp=fopen("hello.txt","w");
//    if(!fp)
//        perror("fopen error!");
//    while(1) ;
//    fclose(fp);
//    return 0;
//}
//
